var globalEstados = new Array();
var globalTargetObject = 'uf'; //Modifique aqui com o nome da tabela referente a página. uf, jogador etc

var globalValidationFailed = new Array();

function requestListDefault(){
    globalCommunicator.resetParameters();
    globalCommunicator.addParameter('listAll', globalTargetObject);
    globalCommunicator.addParameter('orderBy', 'nome');
    globalCommunicator.sendRequest(createList);
}

function createElementsObjects(respostaObj){
    var respostaObjLen = respostaObj.length;
    
    var fragment = document.createDocumentFragment();
    
    for(var i = 0; i < respostaObjLen; i++){
        var uf = new Estado(respostaObj[i][0], respostaObj[i][1]);
        fragment.appendChild(uf.createItemList(uf));
        globalEstados[uf.getKey()] = uf;
    }
    
    return fragment;
}

function getSelectedObject(key){
    return globalEstados[key];
}

function fillFields(obj){
    document.getElementById('nome_uf').value = obj.nome;
}

function deleteItem(){
    if(globalSelectedItem != null){
        if(confirm('Você tem certeza que deseja apagar o item '+globalSelectedItem.nome+' ?')){         
            globalCommunicator.resetParameters();
            globalCommunicator.addParameter('delete', globalTargetObject);
            globalCommunicator.addParameter('id', globalSelectedItem.id);
            globalCommunicator.sendRequest(doChangeHandler);
            
            clearFields();
        }
    }else alert('Deve haver um item selecionado');
}

function saveEditedItem(){
    var communicator = new Communicator();        
    var fields = new Array();
    fields['nome'] = document.getElementById('nome_uf').value;

    var fieldAssigned = validateAssignFields(communicator, fields, globalSelectedItem);

    if(globalValidationFailed.length == 0){
        if(fieldAssigned){
            communicator.addParameter('update', globalTargetObject);
            communicator.addParameter('id', globalSelectedItem.id);
            communicator.sendRequest(doChangeHandler);   
        }else alert('Nenhuma modificação foi feita');
    }else alert('A validação falhou nos seguintes itens: '+globalValidationFailed.join(', '));
}

function saveNewItem(){    
    var communicator = new Communicator();        
    var fields = new Array();
    fields['nome'] = document.getElementById('nome_uf').value;

    var fieldAssigned = validateAssignFields(communicator, fields, globalSelectedItem);
   
    if(globalValidationFailed.length == 0){
        if(fieldAssigned){
            communicator.addParameter('insert', globalTargetObject);
            communicator.sendRequest(doChangeHandler);
        }
    }else alert('A validação falhou nos seguintes itens: '+globalValidationFailed.join(', '));
}

function validateFields(field, value){
    var feedback = false;
    
    if(field == 'nome'){
        if(!validateNome(value)) feedback = 'Nome';
    }
    
    return feedback;
}

//Deve estar presente em todos os scripts, as funções de validação local
function validateNome(value){
    if(value.length != 2 || isNumeric(value.charAt(0)) || isNumeric(value.charAt(1))){
        return false;
    }
    return true;
}

function newItemTasks(){}

function focusFirstField(){
    document.getElementById('fields').getElementsByTagName('input')[0].focus();
}

function makeEarlyTasks(){}

function makeLateTasks(){}

function clearSpecificElements(){}

/*
Orientação a Objetos em Javascript é muito diferente das demais linguagens.
Declare o construtor como function NomeDaClasse(param1, param2){...}
Declare os métodos como NomeDaClasse.prototype.nomeDoMetodo = function(params){}
*/
function Estado(id, nome){
    this.id = id;
    this.nome = nome;    
}

Estado.prototype.getKey = function(){
    return "uf_"+this.id;
}

Estado.prototype.createItemList = function(uf){
    var itemList = document.createElement('DIV');
    itemList.className = 'list_item';
    itemList.setAttribute('DATA-KEY', uf.getKey());
    itemList.addEventListener('click', selectItem, true);
    
    //apenas um dado, nome do Estado. Poderiam ser acrescentados mais.
    var nomeInfo = document.createElement('P');
    nomeInfo.className = 'info';
    nomeInfo.appendChild(document.createTextNode(uf.nome));
    
    itemList.appendChild(nomeInfo);
    
    return itemList;
}